package org.example.projecttwo.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.example.projecttwo.entity.Collection;
import org.example.projecttwo.entity.dto.content.request.CollectionDTO;
import org.example.projecttwo.entity.dto.content.response.CollectionVO;

/**
 * 收藏服务接口
 * 定义收藏管理相关的所有业务方法
 */
public interface ICollectionService extends IService<Collection> {

    /**
     * 分页查询用户收藏，支持按内容类型和关键词搜索
     * @param userId 用户ID
     * @param contentType 内容类型（1-文章，2-新闻，可为空）
     * @param keyword 搜索关键词（内容标题，可为空）
     * @param current 当前页码
     * @param size 每页条数
     * @return 分页的收藏视图对象列表
     */
    IPage<CollectionVO> pageByUserWithSearch(
            Long userId,
            Integer contentType,
            String keyword,
            Long current,
            Long size);

    /**
     * 根据收藏ID获取收藏详情
     * @param id 收藏ID
     * @return 包含关联内容信息的收藏视图对象
     */
    CollectionVO getDetailById(Long id);

    /**
     * 创建新收藏
     * @param dto 收藏操作DTO，包含用户ID、内容类型、内容ID等信息
     * @return 创建的收藏实体
     */
    Collection createCollection(CollectionDTO dto);

    /**
     * 根据内容信息取消收藏
     * @param dto 收藏操作DTO，包含用户ID、内容类型、内容ID等信息
     */
    void removeCollection(CollectionDTO dto);

    /**
     * 检查用户是否已收藏指定内容
     * @param userId 用户ID
     * @param contentType 内容类型
     * @param contentId 内容ID
     * @return 已收藏返回true，否则返回false
     */
    boolean checkCollection(Long userId, Integer contentType, Long contentId);

    /**
     * 统计指定内容的收藏数量
     * @param contentType 内容类型
     * @param contentId 内容ID
     * @return 收藏数量
     */
    int countByContent(Integer contentType, Long contentId);
}